bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask) 
{ 
    for(;*szMask;++szMask,++pData,++bMask) 
        if(*szMask=='x' && *pData!=*bMask ) 
            return false; 
    return (*szMask) == NULL; 
} 
DWORD dwFindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask) 
{ 
    for(DWORD i=0; i < dwLen; i++) 
        if( bDataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) ) 
            return (DWORD)(dwAddress+i); 
      
    return 0; 
} 
{
        static bool applied = false;
        if( applied )   { return true; }
		applied = true;
		DWORD SOUND_ADDR = dwFindPattern(0x1D90000,0x30000,(BYTE*)"\x83\xEC\x48\xA1\x00\x00\x00\x00","xxxx???");  
		BYTE* offs = (BYTE*)SOUND_ADDR; 
		BYTE* sig   = (BYTE*)"\x83\xEC\x48\xA1\x00\x00\x00\x00";
		char* mask  = "xxxx????";
		if(!soundPatch.find_location(offs,sig,mask))
		{
                OGCmessage("&rsound patch failed. 0x%x", stackret);
                return false;
		}
		soundPatch.patchdata[0]=0x68;
		*(DWORD*)(soundPatch.patchdata+1) = (DWORD)JumpGate_DynamicSound;
		soundPatch.patchdata[5]=0xC3;
		soundPatch.patchdata[6]=0x90;
		soundPatch.patchdata[7]=0x90;
		sound_reloc_addr1 = *(DWORD*)(soundPatch.backup+4);

		soundPatch.apply();
        OGCmessage( "&gsound patch applied successfully: 0x%X",SOUND_ADDR); 
        return true;
}